﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
//using Devart.Data.Oracle;


namespace ClasesLibreria.dao
{
    public static class DAOEmpleado
    {
        public static void insertarEmpleado(Empleado empleado, string connectionString)
        {
            SqlConnection conn;
            SqlCommand cmd;

            conn = new SqlConnection();
            conn.ConnectionString = connectionString;
            conn.Open();

            cmd = new SqlCommand("insert into empleado (apellido, nombre, " +
                "idtipodocumento, numerodocumento, calle, " +
                "numero, piso, depto, telefono, idcargo) values (@APELLIDO, " +
                "@NOMBRE, @IDTIPODOCUMENTO, @NUMERODOCUMENTO, @CALLE, @NUMERO," +
                " @PISO, @DEPTO, @TELEFONO,  @IDCARGO);");
            cmd.Connection = conn;

            //cmd.Parameters.Add(new SqlParameter("@LEGAJO", empleado.Legajo));
            cmd.Parameters.Add(new SqlParameter("@APELLIDO", empleado.Apellido));
            cmd.Parameters.Add(new SqlParameter("@NOMBRE", empleado.Nombre));
            cmd.Parameters.Add(new SqlParameter("@IDTIPODOCUMENTO", empleado.TipoDocumento.Id));
            cmd.Parameters.Add(new SqlParameter("@NUMERODOCUMENTO", empleado.NumeroDocumento));
            cmd.Parameters.Add(new SqlParameter("@CALLE", empleado.Calle));
            cmd.Parameters.Add(new SqlParameter("@NUMERO", empleado.CalleNumero));
            cmd.Parameters.Add(new SqlParameter("@PISO", empleado.Piso));
            cmd.Parameters.Add(new SqlParameter("@DEPTO", empleado.Depto));
            cmd.Parameters.Add(new SqlParameter("@TELEFONO", empleado.Telefono));
            cmd.Parameters.Add(new SqlParameter("@IDCARGO", empleado.Cargo.Id));

            int RegistrosAfectados = cmd.ExecuteNonQuery();
            conn.Close();

        }


        public static void borrarEmpleado(Empleado empleado, string connectionString)
        {
            SqlConnection conn;
            SqlCommand cmd;

            conn = new SqlConnection();
            conn.ConnectionString = connectionString;
            conn.Open();

            cmd = new SqlCommand("delete empleado where legajo = @legajo");
            cmd.Connection = conn;

            cmd.Parameters.Add(new SqlParameter("@legajo", empleado.Legajo));
            int RegistrosAfectados = cmd.ExecuteNonQuery();
            conn.Close();
        }

        public static List<Empleado> getAllEmpleados(string connectionString)
        {
            List<Empleado> empleados = new List<Empleado>();

            SqlConnection conn;
            SqlCommand cmd;
            SqlDataReader dr;

            conn = new SqlConnection();
            conn.ConnectionString = connectionString;
            conn.Open();
            cmd = new SqlCommand("SELECT Legajo, IdTipoDocumento, IdCargo, Nombre, " +
                "Apellido, NumeroDocumento, Telefono, Calle, Numero, Piso, Depto FROM empleado");
            cmd.Connection = conn;
            dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                Empleado empleado = new Empleado();

                empleado.Legajo = int.Parse(dr["Legajo"].ToString());
                empleado.Apellido = dr["Apellido"].ToString();
                empleado.Nombre = dr["Nombre"].ToString();
                empleado.TipoDocumento = DAOTipoDocumento.getById(int.Parse(dr["IdTipoDocumento"].ToString()), connectionString);
                empleado.NumeroDocumento = int.Parse(dr["NumeroDocumento"].ToString());
                empleado.Calle = dr["Calle"].ToString();
                empleado.CalleNumero = int.Parse(dr["Numero"].ToString());
                empleado.Piso = dr["Piso"].ToString();
                empleado.Depto = dr["Depto"].ToString();
                empleado.Telefono = dr["Telefono"].ToString();
                empleado.Cargo = DAOCargo.getById(int.Parse(dr["IdCargo"].ToString()), connectionString);

                empleados.Add(empleado);
            }
            return empleados;
        }

        public static SqlDataReader queryEmpleados(string connectionString, string filtroLegajo, string filtroApellido, string stringOrderBy)
        {
            SqlConnection conn;
            SqlCommand cmd;
            SqlDataReader dr;
            string selectClause = null;
            string whereClause = null;
            string orderClause = null;
            string command;

            conn = new SqlConnection();
            conn.ConnectionString = connectionString;
            conn.Open();
            cmd = new SqlCommand();

            selectClause = "SELECT * FROM empleado";

            if (filtroLegajo != "" || filtroApellido != "")
            {
                if (filtroLegajo != "")
                {
                    whereClause = " WHERE Legajo = @Legajo";
                    cmd.Parameters.Add(new SqlParameter("@Legajo", int.Parse(filtroLegajo)));
                }

                if (filtroApellido != "")
                {
                    if (filtroLegajo != "")
                    {
                        whereClause = whereClause + " AND Apellido LIKE @Apellido";
                    }
                    else
                    {
                        whereClause = whereClause + " WHERE Apellido LIKE @Apellido";
                    }
                    cmd.Parameters.Add(new SqlParameter("@Apellido", "%" + filtroApellido + "%"));
                }
            }

            if (stringOrderBy != "")
            {
                orderClause = " ORDER BY " + stringOrderBy;
            }

            command = selectClause + whereClause + orderClause;
            cmd.CommandText = command;

            cmd.Connection = conn;
            dr = cmd.ExecuteReader();

            return dr;
        }

        public static void actualizaEmpleado(Empleado emp, string connectionString)
        {
            SqlConnection conn;
            SqlCommand cmd;

            conn = new SqlConnection();
            conn.ConnectionString = connectionString;
            conn.Open();

            cmd = new SqlCommand("UPDATE empleado " +
"SET apellido = @apellido, " +
"nombre = @nombre, " +
"idtipodocumento = @idtipodocumento, " +
"numerodocumento = @numerodocumento, " +
"calle = @calle, " +
"numero = @numero, " +
"piso = @piso, " +
"depto = @depto, " +
"telefono = @telefono, " +
"idcargo = @idcargo " +
"WHERE legajo = @legajo"
);

            cmd.Connection = conn;

            cmd.Parameters.Add(new SqlParameter("@legajo", emp.Legajo));
            cmd.Parameters.Add(new SqlParameter("@apellido", emp.Apellido));
            cmd.Parameters.Add(new SqlParameter("@nombre", emp.Nombre));
            cmd.Parameters.Add(new SqlParameter("@idtipodocumento", emp.TipoDocumento.Id));
            cmd.Parameters.Add(new SqlParameter("@numerodocumento", emp.NumeroDocumento));
            cmd.Parameters.Add(new SqlParameter("@calle", emp.Calle));
            cmd.Parameters.Add(new SqlParameter("@numero", emp.CalleNumero));
            cmd.Parameters.Add(new SqlParameter("@piso", emp.Piso));
            cmd.Parameters.Add(new SqlParameter("@depto", emp.Depto));
            cmd.Parameters.Add(new SqlParameter("@telefono", emp.Telefono));
            //cmd.Parameters.Add(new SqlParameter("@email", emp.Email));
            cmd.Parameters.Add(new SqlParameter("@idcargo", emp.Cargo.Id));

            int RegistrosAfectados = cmd.ExecuteNonQuery();
            conn.Close();
        }

        public static Empleado getById(int id, string connectionString)
        {
            Empleado empleado = new Empleado();

            SqlConnection conn;
            SqlCommand cmd;
            SqlDataReader dr;

            conn = new SqlConnection();
            conn.ConnectionString = connectionString;
            conn.Open();
            cmd = new SqlCommand("SELECT Legajo, IdTipoDocumento, IdCargo, Nombre, " +
                "Apellido, NumeroDocumento, Telefono, Calle, Numero, Piso, Depto FROM empleado WHERE Legajo = @Legajo");
            cmd.Connection = conn;
            cmd.Parameters.Add(new SqlParameter("@Legajo", id));
            dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                 empleado.Legajo = int.Parse(dr["Legajo"].ToString());
                empleado.Apellido = dr["Apellido"].ToString();
                empleado.Nombre = dr["Nombre"].ToString();
                empleado.TipoDocumento = DAOTipoDocumento.getById(int.Parse(dr["IdTipoDocumento"].ToString()), connectionString);
                empleado.NumeroDocumento = int.Parse(dr["NumeroDocumento"].ToString());
                empleado.Calle = dr["Calle"].ToString();
                empleado.CalleNumero = int.Parse(dr["Numero"].ToString());
                empleado.Piso = dr["Piso"].ToString();
                empleado.Depto = dr["Depto"].ToString();
                empleado.Telefono = dr["Telefono"].ToString();
                empleado.Cargo = DAOCargo.getById(int.Parse(dr["IdCargo"].ToString()), connectionString);

                break;
            }
            conn.Close();
            return empleado;
        }
    }
}
